package br.com.forca.utils;

import java.util.List;
import br.com.forca.model.word.Readable;
import br.com.forca.model.word.Word;

public class WordUtils {
		
	
	public WordUtils() {			
		
	}	
	

	public List<Word> removePalavras(List<Word> wordList, Word w) {
		wordList.remove(w);
		return wordList;
	}
	

	public List<Word> atualizaPalavra(List<Word> wordList, Word w, String palavraNova, String dica) {
		wordList.remove(w);
		wordList.add(new Word(palavraNova, dica));
		return wordList;
	}

	public List<Word> limpaRepositorio(List<Word> wordList) {
		wordList.clear();
		return wordList;
	}
	
	
	public Word retornaPalavra(List<Readable> list) {
		
		int numRandom = (int)(Math.random()*list.size());
		int countaux = 0;
		
		for (Readable w : list) {
			if(countaux == numRandom){
				return (Word) w;
			}			
			countaux++;
		}
		
		return null;
	}
	
	
	public String retornaDica(Readable w) {
		return w.getDicaAtual();
	}

	public int comparaPalavras (String chute, String palavraAtual){
		
		int controle=0;		
		
		char [] arrayChute;
		char [] arrayPalavraATual;
		
		arrayChute=trataArrayLetras(chute);
		arrayPalavraATual = trataArrayLetras(palavraAtual);	
		
		if(chute.length()> palavraAtual.length() ){
			return 1;
		
		}
		
		else if(chute.length()< palavraAtual.length() ){
			return 2;
		}
		
		for (int x=0; x<palavraAtual.length()-1; x++){			
			if((arrayChute[x])==arrayPalavraATual[x]){
				controle++;
			}			
		}
		
		if (controle==palavraAtual.length()-1 && controle==chute.length()-1){
			return 3;
		}			
		
		else {
		return 4;		
		}
		
		
	}
	
	public char trataLetras(String letra) {
		String valor = letra;
		char s;
		
		//Trata letras minusculas
		valor = valor.replaceAll("[ēėěéëêè]", "e");
		valor = valor.replaceAll("[űüùûúŭ]", "u");
		valor = valor.replaceAll("[ìíïîĩīĭ]", "i");
		valor = valor.replaceAll("[àáãåäâ]", "a");
		valor = valor.replaceAll("[ōőŏóòôõö]", "o");		
		valor = valor.replaceAll("[ćĉċčĉçĉ]", "c");
		
		//Trata letras maiusculas
		valor = valor.replaceAll("[ĒĖĚÉËÊÈ]", "E");
		valor = valor.replaceAll("[ŰÜÙÛÚŬ]", "U");
		valor = valor.replaceAll("[ÌÍÏÎĨĪĬ]", "I");
		valor = valor.replaceAll("[ÀÁÃÅÄÂ]", "A");
		valor = valor.replaceAll("[ŌŐŎÓÒÔÕÖ]", "O");		
		valor = valor.replaceAll("[ĆĈĊČĈÇĈ]", "C");
		
		s = valor.charAt(0);
		
		return s;
	}
	
	public char[] trataArrayLetras(String letra) {
			
		char[] arrayLetras = letra.toCharArray();
		
		for (int x=0; x<letra.length();x++){
			arrayLetras[x]=trataLetras(arrayLetras[x]+"");
		}				
		return arrayLetras;
	}

	
	public String trataPalavras(String palavra) {
		char[] valorAcentuado = new char[] { 'á', 'à', 'ã', 'â', 'ä', 'é', 'è',
				'ê', 'ë', 'í', 'ì', 'î', 'ï', 'ó', 'ò', 'õ', 'ô', 'ö', 'ú',
				'ù', 'û', 'ü', 'ç' };
		char[] novovalor = new char[] { 'a', 'a', 'a', 'a', 'a', 'e', 'e', 'e',
				'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'u', 'u',
				'u', 'u', 'c', };

		for (int i = 0; i < valorAcentuado.length; i++) {
			palavra = palavra.replace(valorAcentuado[i], novovalor[i]);
			palavra = palavra.replace(Character.toUpperCase(valorAcentuado[i]),
					Character.toUpperCase(novovalor[i]));
		}
		return palavra;
	}


}
